#include<iostream>
#include<unordered_map>
#include<gtest/gtest.h>

class MyTest : public testing::Test {
    public:
        static void SetUpTestCase() {
            std::cout << "所有单元测试前执行，初始化总环境！" << std::endl;
            //可以插入公共的测试数据
        }
        virtual void SetUp() override{
            std::cout << "每个单元测试前初始化!" << std::endl;
            //插入每个单元测试所需的独立测试数据
            //类似构造函数
            _mymap.insert(std::make_pair("hello", "你好"));
            _mymap.insert(std::make_pair("bye", "再见"));
        }
        virtual void TearDown() override{
            std::cout << "每个单元测试后清理数据！" << std::endl;
            //清理每个单元测试自己插入的数据
            //类似析构函数
            _mymap.clear();
        }
        static void TearDownTestCase() {
            std::cout << "所有单元测试执行完毕后，清理总环境！" << std::endl;
            //清理公共的测试数据
        }
        
    public:
        std::unordered_map<std::string, std::string> _mymap;//独立在此
};

TEST_F(MyTest, size_test) {//每个单元测试都是一个新的类对象（独立在此）
    ASSERT_EQ(_mymap.size(),2);
}

TEST_F(MyTest, insert_test) {//总的测试名称必须和类名一致，这样才能访问成员对象（独立在此）
    _mymap.insert(std::make_pair("leihou", "你好"));
    ASSERT_EQ(_mymap.size(),3);
}

int main(int argc, char* argv[]) {
    testing::InitGoogleTest(&argc, argv);
    RUN_ALL_TESTS();
    return 0;
}